ソフトウェア要求 第 3 版
https://images-fe.ssl-images-amazon.com/images/I/41OHIhRhKdL._SX218_BO1,204,203,200_QL40_ML2_.jpg
内容メモ・感想
感想 nobuoka.icon
めちゃくちゃ学びがあって良い
日本語だと 「要求」 と 「要件」 を使い分けたりするが、英語だと全部 requirements らしい
本書の訳も 「要求」 で統一されている
ユースケース駆動開発だと、まずは機能要求があって、それを満たすようなユースケースを書くことでシステムの振る舞いを顧客と合意する、というような逆の流れっぽい? ソフトウェア要求 (1 部)
ソフトウェア要求の基礎 (1 章)
ソフトウェア世界の問題の多くは、人がプロダクトの要求を知って、文書化して合意に至り、修正する、という方法に欠陥があることに起因
プロジェクトのステークホルダーが要求とは何かという共通認識を持っているという仮定をしてはならない (前もって定義を明確にしておくこと)
「要求」 には様々な定義があるので、統一した形容で要求を修飾すべし
本書ではプロジェクト要求については詳細は取り扱わないが、プロジェクト要求が重要でないというわけではない
ソフトウェアシステムを作るうえで最も難しいのは、何を作るべきかを正確に決めること
設計や実装を始める前に、全ての機能要求を明確化できない or しなくてよい場合 → イテレーティブ or インクリメンタル型のアプローチで要求の一部を実装してから顧客のフィードバックを受けて次のサイクルへ 要求にかける時間を惜しむのではなく、要求に十分に注意を払わない場合に発生する浪費を惜しむべき
手戻りには、開発費の 30 ~ 50 % かかることが多い
要求の誤りが手戻りコストの 70 ~ 80 % を占める
一般的な要求リスク (一部のみ)
不正確な計画 : 要求に基づいてプロジェクトの工数を所要時間を見積もるために、要求の規模と開発チームの生産性を知る必要
ユーザー要求のクリープ : 開発中に要求が膨らむ
まずはベースラインを明確に記述すること
金メッキ : 開発者が、要求仕様にない機能を 「ユーザーが喜ぶだろう」 と思って追加する場合に発生
ステークホルダーの見落とし : プロジェクトの存在を知りもしないステークホルダーも存在する (システムに関連する標準を義務付ける政府機関など)
顧客の観点から見た要求 (2 章)
顧客と開発者の関係という、重大なテーマ
ビジネス目標を話せる人がシステムのユーザーとは限らない (ユーザー要求を話せない) し、ユーザーは機能要求を全て明確にできるわけでもない
顧客、特にユーザーが要求開発に参加する重要性
プロジェクト初期に、要求に関する意思決定者が誰で、どのように意思決定するのかを判断すること
グループで意思決定する場合は、意思決定リーダーを決め、決定に至る方法を決める決定ルールを選定する必要
要求について顧客と開発者が合意に達することが両者のパートナーシップの中核
要求合意時のベースライン (その時点でのスナップショット) を確立するという考え方が重要
アジャイル型環境でも、サインオフの考え方は有効に働く (変化という考え方が存在するのは、何か基準がある場合だけ)
要求工学の良いプラクティス (3 章)
50 を超える要求工学の良いプラクティスを 7 つのカテゴリ (引き出し、分析、仕様作成、妥当性確認、要求管理、知識、プロジェクトマネジメント) に分類した表が書かれている
要求開発はイテレーティブに行われる (段階的詳細化) https://gyazo.com/9c45aabac025cc87bfa5a16028f996d6
プロジェクトも組織文化も多様なので要求開発プロセスに決まったアプローチはないが、次のフレームワークをベースにすると良い
https://gyazo.com/0514df5078eebda011187e4eacc9c2fe
ビジネスアナリスト (4 章)
要求開発 (2 部)
ビジネス要求の確立 (5 章)
スコープが変更された場合、計画を変更する必要がある
多くのアジャイル型プロジェクトでは、計画イテレーション (イテレーションゼロ) にて包括的なプロダクトビジョンとプロジェクトの他のビジネス要求を定義する
あらゆるプロジェクトでビジネス目標を明確にすることに集中しよう
ユーザーの意見の掘り出し (6 章)
顧客が期待するものと開発者が開発するものの不一致を避ける最善の方法は、顧客が参加すること
一種類のユーザーだけを想定するのではなく、複数のユーザークラスを想定すること プロジェクト初期に、ユーザークラスを特定して、それぞれの特徴を明らかにすること
特定には、さまざまな分析モデル (例 : コンテキスト図の外部エンティティはユーザークラスの候補) や会社の組織図などが役立つ それにより、重要なユーザークラスのそれぞれの代表者から要求を引き出せる (拡張集約法が役立つ) 例 : 開発チームのメンバーは構築中のシステムのエンドユーザーではないが、内部品質に関して要求を持つ ペルソナを通して考えると、要求についての思考プロセスが具体的になる アジャイル型プロジェクトにおけるユーザーの代表者
アジャイル型プロジェクトの 「顧客と開発者の密接な連携」 は健全な思想ではあるが、1 人の人が全てのユーザークラスのニーズを理解して説明できるようになるというのは (小規模プロジェクトでなければ) 現実的ではない
プロダクトチャンピオンのような代表者構造を使用して、ユーザーの適切な参加を保証する方法が良いのではないか
要求の引き出し (7 章)
要求の引き出し技法
ファシリテーション付きのアクティビティ : ステークホルダーとやり取りしながら要求を引き出す
インタビュー、ワークショップ、フォーカスグループ、観察、アンケート
独立型のアクティビティ : 自分だけで作業して情報を見つける
ユーザーが表した要求を補足するもので、ユーザー自身では気づかない可能性がある機能を明らかにする
システムインターフェイス分析、ユーザーインターフェイス分析、文書分析
引き出しプロセス全体 (引き出しアクティビティの計画からセッションのアウトプットの整理まで)
アナリストであるからには、顧客が示す要求の表面だけでなく裏側を探って、真のニーズを理解せねばならない
「何が欲しいのですか」 ではなく 「何をする必要がありますか」 の方がはるかに良い質問
「なぜ」 を何回か聞くことで、ソリューションの提示ではなく解決すべき問題をしっかり理解できる
「他に聞かれるだろうと思っていたことはありますか」 と聞いて、考えていなかった問題を明らかにする努力をする
顧客から聞いた要求情報をカテゴリ分類して適切に文書化して使用できるように
引き出しの参加者が 「これがビジネス要求です」 などと教えてくれることはないので、アナリストが判断する
9 つに分類 : ビジネス要求、ユーザー要求、ビジネスルール、機能要求、品質属性、外部インターフェイス要求、制約条件、データ要求、ソリューションのアイデア
要求の引き出しの完了を示すわかりやすい指標はない
引き出しに関する注意
要求の引き出しでは what に集中すべきだが、分析と設計の間はグレーゾーン
how を仮定するとユーザーが必要としているものを理解しやすい (ただし、それはあくまで仮のものだということをユーザーに理解してもらう必要がある)
非明示的な要求
ステークホルダーの期待と異なるものを生み出してしまう原因になる
前提とする要求 : 明示的に表現されないが、人が期待する要求
暗黙の要求 : 他の要求のために必要だが、明示されていない要求
「何を前提にしていますか?」 と聞いて、隠れている考えを明らかにする
抜けている要求の発見
概要レベルの要求を詳細レベルに分解する : 概要レベルのあいまいな要求は読み手の解釈次第なので、期待と作るものの間にギャップがでる
境界値をチェック
一般的な機能のチェックリストを作る (例 : エラーロギング、バックアップとリストア、アクセス制御セキュリティ、報告書作成、印刷、プレビュー機能、ユーザーの好みの構成、など)
ユーザー要求の理解 (8 章)
ユースケース : システムと外部のアクターとの間の、アクターにとって価値のある結果をもたらすことのできる、一連の相互作用を記述するもの ユーザーストーリー : 新しい能力を望む人 (通常はシステムのユーザーや顧客) の観点からフィーチャーを簡潔に記述したもの 簡潔な記述でユーザーニーズを伝え、詳細を具体化するための話し合いの出発点となる
ユーザーストーリーのユーザークラス (人間でなくてもよい) はユースケースの主アクターに相当
ユースケースやユーザーストーリーは、プロダクト中心の観点ではなくユーザーニーズを捉えるのに役立つ
一方で、ユーザーとシステムの相互作用以外の部分に複雑性がある場合にはあまり有効ではない
多くの組み込みシステムやほかのリアルタイムシステムの仕様作成にも向いていない
ユーザーの目的は 1 つでも、システムの方が複雑な場合がある (多くのボタン操作やセンサーによる制御など)
→ 外部イベントとシステムの応答を一覧する技法が使える
ユースケースとユーザーストーリーの出発点は似ているが、向かう先は違う
https://gyazo.com/14355b332ba450710114784b27c86de7
ユーザーストーリーアプローチでは、一般的に機能要求仕様は作成せず、受け入れテストの集合を作る
開発者は、受け入れテストに通るように実装を行う
ユースケースアプローチでは、ユーザーストーリーでは提供できない構造と背景を提供する
アジャイルの世界ではユースケース全体が網羅するスコープと同じものをユーザーストーリーが網羅することはある https://gyazo.com/dcf38a38dd389319495940710e61b797
実装やユーザーインターフェイスの詳細とは独立した概念テストを早期に作成すると、チームが共通理解を得るのに役立つ
要求を複数の方法 (機能要求の一覧や対応するテスト、分析モデルなど) で表現するのは良い考え
要求が一つの方法でしか表現されてないと、比較して誤りを見つけたりができない
機能要求 : システムの振る舞いの具体的な一部
多くの機能要求はユースケースシナリオからそのまま導出できる
ユースケースに含まれない機能要求もある → ビジネスアナリストが導き出して開発者に伝える必要 また、複数のユースケースに含まれる同じ機能要求もある
ユースケースだけを記述する方法もあれば、ユースケースと機能要求をそれぞれ文書化する方法などもある
ユースケースの罠
ユースケースが多すぎる : 適切な抽象度になっていないのでは?
複雑なユースケース : 代替フローにすべきものを通常フローに入れるなどしているのでは?
設計を含んでいる : ユースケースは、ユーザーがシステムの支援で何を達成するかを表現するもの
データ定義を含んでいる : データ定義はプロジェクト単位のドキュメント等に入れる
ユーザーが理解できないユースケース : ユースケースはユーザーの観点のもの
ユースケースの技術的な利益
そのドメインで重要なオブジェクトとその相互の責務を明らかにする
時間経過によるビジネスプロセスの変化を、機能要求や設計、コードに伝えやすい
ルールに従った行動 (9 章)
ビジネスルール自体はビジネスに属するものでソフトウェア要求ではないが、要求の発生源になりえる
政府の法規制がビジネス目標につながることもある (ビジネス要求) し、プライバシーポリシーがユーザー要求につながることもあるし、その他ビジネスルールが機能要求や品質属性に関係しうる
ビジネスアナリストは、プロジェクトに影響をおよぼすルールについて、誰に聞けばいいか知っている必要がある
ビジネスルールを文書化したら、ソフトウェアに実装すべきルールはどれかを決める
要求の文書化 (10 章)
優れた要求の記述 (11 章)
要求開発に続くもの (19 章)
特定の種類のプロジェクト向けの要求 (3 部)
アジャイル型プロジェクト (20 章)
組込みおよびその他のリアルタイムシステムのxxx (26 章)
要求管理 (4 部)
要求管理のプラクティス (28 章)
要求連鎖のつながり (29 章)
要求の追跡
一例
https://gyazo.com/9521395ab94ec0ecda2095eb3968e29f
追跡する動機は?
要求の抜けの発見や不要な要求の発見などに繋がる
変更の影響を把握しやすくする
保守しやすくする
など
要求プロセスの改善 (31 章)
プロセス改善を成功させるためには計画が必要
ロードマップの作成など
一例
https://gyazo.com/c25f9802f89a8b702997910c34e55088
右側の箱が望むビジネス目標で、丸がマイルストーン、他の箱が大きな改善アクティビティ